package com.arpa.wms.domain.dto;

import com.arpa.wms.domain.entity.BasicEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 拣货单DTO
 * </p>
 *
 * @author LEO
 * @since 2020-08-07
 */
@Data
@ApiModel(value="PickingDTO对象", description="拣货单")
public class PickingDTO extends BasicEntity {


    @ApiModelProperty(value = "拣货单号")
    private String code;

    @ApiModelProperty(value = "仓库")
    private String warehouseCode;

    @ApiModelProperty(value = "入驻商")
    private String shipmentCode;

    @ApiModelProperty(value = "登录仓库授权该账号的货主集合")
    private List<String> shipmentCodes;

    @ApiModelProperty(value = "授权该账号的仓库集合")
    private List<String> warehouseCodes;

    @ApiModelProperty(value = "入驻商")
    private String shipmentName;

    @ApiModelProperty(value = "出货单编号")
    private String deliveryCode;

    @ApiModelProperty(value = "所属机构Code")
    private String groupCode;

    @ApiModelProperty(value = "来源单号")
    private String sourceCode;

    @ApiModelProperty(value = "单据类型")
    private String type;

    @ApiModelProperty(value = "计划数量")
    private BigDecimal planQuantity;

    @ApiModelProperty(value = "拣货数量")
    private BigDecimal pickingQuantity;

    @ApiModelProperty(value = "待拣数量")
    private BigDecimal notPickingQuantity;

    @ApiModelProperty(value = "状态")
    private String status;

    @ApiModelProperty(value = "备注")
    private String remarks;


    @ApiModelProperty(value = "第几页")
    private Integer pageNum=1;

    @ApiModelProperty(value = "每页条数")
    private Integer pageSize=10;

    @ApiModelProperty(value = "排序字段")
    private String sortField;

    @ApiModelProperty(value = "排序方式")
    private String sortType;

    @ApiModelProperty(value = "计划数量下限")
    private BigDecimal planQuantityStart;

    @ApiModelProperty(value = "拣货数量下限")
    private BigDecimal pickingQuantityStart;

    @ApiModelProperty(value = "待拣数量下限")
    private BigDecimal notPickingQuantityStart;

    @ApiModelProperty(value = "计划数量上限")
    private BigDecimal planQuantityEnd;

    @ApiModelProperty(value = "拣货数量上限")
    private BigDecimal pickingQuantityEnd;

    @ApiModelProperty(value = "待拣数量上限")
    private BigDecimal notPickingQuantityEnd;

    @ApiModelProperty(value = "下发状态:0未下发，1已下发；")
    private Integer issue;

    @ApiModelProperty(value = "波次单号")
    private String wavePickingCode;

    @ApiModelProperty(value = "商品种类数量")
    private BigDecimal goodsSortQuantity;

    @ApiModelProperty(value = "订单标识")
    private String orderTag;

    @ApiModelProperty(value = "是否预打包拣货单:0否1是")
    private Integer prepackaged;

    @ApiModelProperty(value = "出库单下发状态:0未下发，1已下发；")
    private Integer outboundIsIssue;

    @ApiModelProperty(value = "商品种类数量下限")
    private BigDecimal goodsSortQuantityStart;

    @ApiModelProperty(value = "商品种类数量下限")
    private BigDecimal goodsSortQuantityEnd;

    @ApiModelProperty(value = "包裹数量")
    private Integer packageQuantity;

    /**
     * 是否预打包单生成的拣货单:0否1是  用来区分是预打包生成拣货单还是 通过订单生成拣货单
     */
    @ApiModelProperty(value = "是否预打包单生成的拣货单:0否1是")
    private Integer prepackagedGenerate;

    @ApiModelProperty(value = "承运商code")
    private String carrierCode;

    @ApiModelProperty(value = "拣货完成时间（开始）")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime pickingCompletionTimeStart;

    @ApiModelProperty(value = "拣货完成时间（结束）")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime pickingCompletionTimeEnd;

    /**
     * 拣货单打印次数 （未打印，次数=0；已打印，次数>0）
     */
    @ApiModelProperty(value = "拣货单打印次数")
    private Integer pickingPrintCount;

    /**
     * 面单打印次数 (未打印，次数=0；已打印，次数>0)
     */
    @ApiModelProperty(value = "面单打印次数")
    private Integer waybillPrintCount;

    /**
     * 拣货单（序号）打印次数(未打印，次数=0；已打印，次数>0)
     */
    @ApiModelProperty(value = "拣货单（序号）打印次数")
    private Integer pickingSortPrintCount;

    @ApiModelProperty(value = "是否复核:0不复核，1复核")
    private Integer review;
}
